package com.haipumi.actions;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import com.haipumi.actions.model.TaskModel;
import com.haipumi.beans.IndexTaskData;
import com.haipumi.beans.JsonModel;
import com.haipumi.beans.haipumi_reply;
import com.haipumi.beans.haipumi_task;
import com.haipumi.beans.haipumi_user;
import com.haipumi.biz.TaskBiz;
import com.haipumi.biz.impl.TaskBizImpl;
import com.haipumi.utils.CommonData;
import com.haipumi.utils.RequestUtil;
import com.haipumi.utils.YcStringUtils;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class indexTaskAction extends ActionSupport implements ModelDriven<TaskModel>{

	private static final long serialVersionUID = -1630683476579326392L;

	private JsonModel jm;
	private HttpServletRequest request=ServletActionContext.getRequest();
	private TaskBiz taskBiz;
	private static String STATICttid;//?? TODO
	private static String STATIClimit;//??
	private TaskModel taskModel=new TaskModel();

	@Override
	public String execute(){
		String op=taskModel.getOp();
		String path="success";
		if(op!=null){
			if("indexFindTask".equals(op)){
				indexFindTaskOp( );
			}else if("indexTaskForm".equals(op)){
				indexTaskFormOp( );
			}else if("findTask".equals(op)){
				findTaskOp( );
			}else if("findTaskReply".equals(op)){
				findTaskReplyOp( );
			}else if("acceptTask".equals(op)){
				acceptTaskOp( );
			}else if("careTask".equals(op)){
				careTaskOp( );
			}else if("shieldTask".equals(op)){
				shieldTaskOp( );
			}else if("operateTask".equals(op)){
				operateTaskOp( );
			}else if("taskdetail".equals(op)){
				path=taskdetailOp( );
			}
		}
		return path;
	}
	
	//查看任务详情
	private String taskdetailOp() {
		String tid=taskModel.getTid();
		if(tid.indexOf(":")>0){
			String[] tids=tid.split(":");
			if(tids.length>2){
				tid=tids[2];
			}
		}
		if(tid==null || "".equals(tid)){
			tid="0";
		}
		
		List<IndexTaskData> list=taskBiz.findNewTask(tid,"-1","0","0","");
		if(list.get(0)!=null){
			list.get(0).setTsendtime(list.get(0).getTsendtime().substring(0, 10));
			request.setAttribute(CommonData.DETAILSESSION, list.get(0));
		}
		//struts2 默认是转发  type="redirect" 这是重定向
		return "details";
	}

	//任务管理页面  对各种类任务的操作
	private void operateTaskOp() {
		haipumi_user user=(haipumi_user) request.getSession().getAttribute(CommonData.USERSESSION);
		if( judgeIsLogin(user) ){
			return;
		}
		String status=taskModel.getStatus();
		String tid=taskModel.getTid();
		int falg=taskBiz.operateTask(tid,status,user);
		jm=new JsonModel();
		if(falg>0){
			jm.setCode(1);
		}else{
			jm.setMsg("操作失败,请重试");
		}
	}

	//屏蔽任务
	private void shieldTaskOp() {
		haipumi_user user=(haipumi_user) request.getSession().getAttribute(CommonData.USERSESSION);
		if( judgeIsLogin(user) ){
			return;
		}
		String tid=taskModel.getTid();
		String status=taskModel.getStatus();//为了判断是取消屏蔽,还是添加屏蔽
		int flag=taskBiz.shieldTask(user,tid,status);
		jm=new JsonModel();
		if(flag>0){
			jm.setCode(1);
		}else{
			jm.setCode(0);
			if(flag==-1){
				//表示已经屏蔽过了
				jm.setMsg("请勿重复屏蔽任务!");
			}else if(flag==-2){
				//表示自己屏蔽自己
				jm.setMsg("不能屏蔽自己!");
			}else{
				jm.setMsg("屏蔽失败,请和客服联系!");
			}
		}
	}

	//关注任务
	private void careTaskOp() {
		haipumi_user user=(haipumi_user) request.getSession().getAttribute(CommonData.USERSESSION);
		if( judgeIsLogin(user ) ){
			return;
		}
		String tid=taskModel.getTid();
		String status=taskModel.getStatus();
		String[] flag=taskBiz.caretTask(user,tid,status);
		//0表示关注, 2表示取消关注 
		if("0".equals( flag[0] )){
			user.setUlike(Integer.toString( Integer.parseInt( user.getUlike() )+1 ));
		}else if("2".equals( flag[0] )){
			user.setUlike(Integer.toString( Integer.parseInt( user.getUlike() )-1 ));
		}
		request.getSession().setAttribute(CommonData.USERSESSION, user);
		jm=new JsonModel();
		if(Integer.parseInt( flag[1] )>0){
			jm.setCode(1);
			jm.setObj(flag);
		}else{
			jm.setCode(0);
			jm.setMsg("关注任务失败!");
		}
	}

	//接收任务
	private void acceptTaskOp() {
		haipumi_user user=(haipumi_user) request.getSession().getAttribute(CommonData.USERSESSION);
		if( judgeIsLogin(user) ){
			return;
		}
		String tid=taskModel.getTid();
		int flag=taskBiz.acceptTask(user,tid);
		jm=new JsonModel();
		if(flag>0){
			jm.setCode(1);
		}else{
			jm.setCode(0);
			jm.setMsg("不能够接受自己的任务");
		}
	}

	//查询评论内容
	private void findTaskReplyOp() {
		String tid=taskModel.getTid();
		List<haipumi_reply> list=taskBiz.findReply(tid);
		jm=new JsonModel();
		jm.setCode(1);
		jm.setObj(list);
		
	}

	//任务管理页面的 任务管理
	private void findTaskOp() {
		haipumi_user user=(haipumi_user) request.getSession().getAttribute(CommonData.USERSESSION);//取到当前用户的id
		if (judgeIsLogin(user) ){
			return;
		}
		String status=taskModel.getStatus();
		String uid=user.getUid();
		List<haipumi_task> list=taskBiz.findAllTask(uid,status);
		jm=new JsonModel();
		jm.setCode(1);
		jm.setObj(list);
	}

	//首页发布任务
	private void indexTaskFormOp() {
		haipumi_user user=(haipumi_user) request.getSession().getAttribute(CommonData.USERSESSION);
		if (judgeIsLogin(user) ){
			return;
		}
		
		if("当天".equals(taskModel.getTdate())){
			Date date= new Date();//创建一个时间对象，获取到当前的时间
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//设置时间显示格式
			String str = sdf.format(date);//将当前时间格式化为需要的类型
			taskModel.setTstarttime(str+" 00:00:00");
			taskModel.setTendtime(str+" 23:59:59");
		}else{
			//裁剪传来的字符串,分出开始时间和结束时间
			String[] tdates=taskModel.getTdate().split("-");
			//开始时间
			String[] tstartDates=tdates[0].split("/");
			if(tstartDates.length<3){//防止空指针
				return;
			}
			//传来的格式 月/日/年
			taskModel.setTstarttime("20"+tstartDates[2].trim()+"-"+tstartDates[0].trim()+"-"+tstartDates[1]+" 00:00:00");
			//结束时间
			String[] tendDates=tdates[1].split("/");
			taskModel.setTendtime("20"+tendDates[2].trim()+"-"+tendDates[0].trim()+"-"+tendDates[1]+" 23:59:59");
		}
		taskModel.setTmore(YcStringUtils.javascriptEscape( taskModel.getTmore() ) );
		taskModel.setTaddr(YcStringUtils.javascriptEscape( taskModel.getTaddr() ) );
		IndexTaskData newTaskData=taskBiz.addTask(taskModel, user);
		//对求助信息条数进行处理
		user.setIssuecount(Integer.toString( Integer.parseInt( user.getIssuecount() )+1 ));
		request.getSession().setAttribute(CommonData.USERSESSION, user);
		
		jm=new JsonModel();
		jm.setCode(1);
		jm.setObj(newTaskData);
		
	}

	//首页查询数据
	private void indexFindTaskOp() {
		boolean readflag=false;//是否清空当前页面的数据
		haipumi_user user=(haipumi_user) request.getSession().getAttribute(CommonData.USERSESSION);//取到当前用户的id
		String uid="0";//0为游客查询
		if(user!=null){
			//表示为登陆状态
			uid=user.getUid();
			//需要判断,不刷出屏蔽的任务
		}
		
		String ttid=taskModel.getTtid();
		String limit=taskModel.getLimit();
		String oldTask=(String) request.getSession().getAttribute(CommonData.READSESSION);
		String mark=taskModel.getMark();
		//选择了其他类别,清空session的已阅数据
		if(!ttid.equals(STATICttid) || !limit.equals(STATIClimit) || "0".equals(mark)){
			oldTask=null;
			readflag=true;
		}
		if(oldTask==null){
			oldTask="";
		}
		STATIClimit=limit;
		STATICttid=ttid;
		List<IndexTaskData> list=taskBiz.findNewTask("",uid,ttid,limit,oldTask);
		for(int i=0;i<list.size();i++){
			oldTask=oldTask+list.get(i).getTid()+",";
		}
		request.getSession().setAttribute(CommonData.READSESSION, oldTask);
		jm=new JsonModel();
		if(list.size()==0){//如果没有数据
			jm.setCode(-1);
		}else{
			jm.setCode(1);
			jm.setObj(list);			
		}
		if(readflag){
			jm.setMsg("0");//清空标记
		}else{
			jm.setMsg("1");
		}
	}
	
	//判断是否账号登陆
	private boolean judgeIsLogin(haipumi_user user){
		boolean flag=false;//默认未登录
		if(user==null){
			flag=true;
			jm=new JsonModel();
			jm.setCode(0);
			jm.setMsg("请先登录...");
		}
		return flag;
	}

	@Override
	public TaskModel getModel() {
		return taskModel;
	}
	
	public JsonModel getJm() {
		return jm;
	}

	@Resource(name = "taskBizImpl")
	public void setTaskBiz(TaskBiz taskBiz) {
		this.taskBiz = taskBiz;
	}
	
}
